<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function getData(url) {
            var p = new Promise((reslove, reject) => {
                let xhr = new XMLHttpRequest()

                xhr.open('get', url)

                xhr.send()

                xhr.onreadystatechange = function() {
                    if (xhr.readyState !== 4) return
                    if (xhr.readyState === 4 && xhr.status === 200) {
                        reslove(xhr.responseText)
                    } else {
                        reject('服务器错误')
                    }
                }
            })
            return p
        }
        // getData('http://localhost:3000/data')
        //     .then((data) => {
        //         console.log(data)
        //         return getData('http://localhost:3000/data1')
        //     }).then((data) => {
        //         console.log(data)
        //         return getData('http://localhost:3000/data2')
        //     }).then((data) => {
        //         console.log(data)
        //     })
        let p1 = getData('http://localhost:3000/a1')
        let p2 = getData('http://localhost:3000/a2')
        let p3 = getData('http://localhost:3000/a3')


        //实例方法： .then   .catch   .finally
        // .catch 获取错误得值  .finally 不管争取还是错误，在异步事件执行完后 都会执行的函数




        //对象方法
        // 在所有异步事件执行完成后 返回所有的 异步事件的结果
        Promise.all([p1, p2, p3]).then((data) => {
            console.log(data)
        })

        // 只返回最先执行完的异步事件的结果
        Promise.race([p1, p2, p3]).then((data) => {
            console.log(data)
        })
    </script>
</body>

</html>